! Copyright (c) [2019] Bangjie Deng
! FChaseSolver is licensed under the Mulan PSL v1.
! You can use this software according to the terms and conditions of the Mulan PSL v1.
! You may obtain a copy of Mulan PSL v1 at:
! http://license.coscl.org.cn/MulanPSL
! THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
! IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
! PURPOSE.
! See the Mulan PSL v1 for more details.


module FChaseSolver
    implicit none;
    interface
        module subroutine fcs_idep(x, n, a, b, c, d)
            integer, parameter :: k = 4;
            integer, intent(in) :: n;
            real(kind = k), dimension(:), intent(in) :: a;
            real(kind = k), dimension(:), intent(in) :: b;
            real(kind = k), dimension(:), intent(in) :: c;
            real(kind = k), dimension(:), intent(in) :: d;
            real(kind = k), dimension(:), intent(inout) :: x;
        end subroutine

        module subroutine fcd_idep(x, n, a, b, c, d)
            integer, parameter :: k = 8;
            integer, intent(in) :: n;
            real(kind = k), dimension(:), intent(in) :: a;
            real(kind = k), dimension(:), intent(in) :: b;
            real(kind = k), dimension(:), intent(in) :: c;
            real(kind = k), dimension(:), intent(in) :: d;
            real(kind = k), dimension(:), intent(inout) :: x;
        end subroutine

        module subroutine fcc_idep(x, n, a, b, c, d)
            integer, parameter :: k = 4;
            integer, intent(in) :: n;
            complex(kind = k), dimension(:), intent(in) :: a;
            complex(kind = k), dimension(:), intent(in) :: b;
            complex(kind = k), dimension(:), intent(in) :: c;
            complex(kind = k), dimension(:), intent(in) :: d;
            complex(kind = k), dimension(:), intent(inout) :: x;
        end subroutine

        module subroutine fcz_idep(x, n, a, b, c, d)
            integer, parameter :: k = 8;
            integer, intent(in) :: n;
            complex(kind = k), dimension(:), intent(in) :: a;
            complex(kind = k), dimension(:), intent(in) :: b;
            complex(kind = k), dimension(:), intent(in) :: c;
            complex(kind = k), dimension(:), intent(in) :: d;
            complex(kind = k), dimension(:), intent(inout) :: x;
        end subroutine
    end interface
end module FChaseSolver

